package com.wnxy.pawnbackgroundsystem.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wnxy.pawnbackgroundsystem.dto.ParameterDto;
import com.wnxy.pawnbackgroundsystem.entity.Parameter;
import com.wnxy.pawnbackgroundsystem.dao.ParameterMapper;
import com.wnxy.pawnbackgroundsystem.entity.Size;
import com.wnxy.pawnbackgroundsystem.param.AddParameterParam;
import com.wnxy.pawnbackgroundsystem.param.SelectParameterParam;
import com.wnxy.pawnbackgroundsystem.param.UpdateParameterParam;
import com.wnxy.pawnbackgroundsystem.service.IParameterService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wnxy.pawnbackgroundsystem.service.ISizeService;
import org.apache.tomcat.util.buf.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 商品参数表 服务实现类
 * </p>
 *
 * @author Lucas
 * @since 2021-10-14
 */
@Service
public class ParameterServiceImpl extends ServiceImpl<ParameterMapper, Parameter> implements IParameterService {
    @Autowired
    private ISizeService iSizeService;
    @Override
    public IPage<ParameterDto> selectParameter(SelectParameterParam spp) {
        Page<Parameter> page = this.page(new Page<>(spp.getPageParam().getIndexPage(), spp.getPageParam().getSize()), new LambdaQueryWrapper<Parameter>().
                like(null!=spp.getParameterName()&&!spp.getParameterName().equals(""), Parameter::getParameterName, spp.getParameterName())
        );
        List<Parameter> records = page.getRecords();
        List<ParameterDto> parameterDtos=new ArrayList<>();
        for (Parameter record : records) {
            List<Size> list = iSizeService.list(new LambdaQueryWrapper<Size>().eq(Size::getParameterName, record.getParameterName()));
            String parameterName = list.stream().map(p -> p.getSizeName()).collect(Collectors.joining(","));
            ParameterDto parameterDto = new ParameterDto();
            BeanUtils.copyProperties(record,parameterDto);
            parameterDto.setSizeName(parameterName);
            parameterDto.setSize(list);
            parameterDtos.add(parameterDto);
        }
        IPage<ParameterDto> parameterDtoPage = new Page<>();
        parameterDtoPage.setRecords(parameterDtos);
        parameterDtoPage.setTotal(page.getTotal());
        parameterDtoPage.setSize(page.getSize());
        parameterDtoPage.setCurrent(page.getCurrent());
        return parameterDtoPage;
//        QueryWrapper<Parameter> qw = new QueryWrapper<>();
//        ParameterPageDto pd=new ParameterPageDto();
//        Page<Parameter> p=null;
//
//        if(null!=spp){
//            if(spp.getParameterName()!=null){
//                qw.like("parameter_name", spp.getParameterName());
//            }
//            if(spp.getPageParam()!=null){
//                System.out.println(spp.getPageParam().getIndexPage());
//                p=new Page<>(spp.getPageParam().getIndexPage(),spp.getPageParam().getSize());
//            }
//        }
//        if (p==null){
//            List<Parameter> parameters = list(qw);
//            List<ParameterDto> tds= BeanUtilsExt.copyPropertiesList(ParameterDto.class,parameters);
//            pd.setAds(tds);
//        }else{
//            IPage<Parameter> iPage = page(p, qw);
//            pd.setIndexPage(iPage.getCurrent());
//            pd.setAllCont(iPage.getTotal());
//            List<ParameterDto> tds= BeanUtilsExt.copyPropertiesList(ParameterDto.class,iPage.getRecords());
//            pd.setAds(tds);
//        }
//        return pd;
    }

    @Override
    public void addParameter(AddParameterParam addParameterParam) {
        Parameter one = getOne(new QueryWrapper<Parameter>().eq(" parameter_name", addParameterParam.getParameterName()));
        if(one==null){
            Parameter parameter = new Parameter();
            parameter.setPropertyId(addParameterParam.getPropertyId());
            parameter.setParameterName(addParameterParam.getParameterName());
            parameter.setParameterType(addParameterParam.getParameterType());
            parameter.setParameterWay(addParameterParam.getParameterWay());
            List<String> sizeName = addParameterParam.getSizeName();
            String name= StringUtils.join(sizeName,',');
            System.out.println(name);
            Size size = new Size();
            size.setSizeName(name);
            size.setParameterName(addParameterParam.getParameterName());
            iSizeService.save(size);
            Size getSize= iSizeService.getOne(new QueryWrapper<Size>().eq("parameter_name", addParameterParam.getParameterName()));
            parameter.setSizeId(getSize.getSizeId());
            save(parameter);

        }
    }

    @Override
    public void delParameter(Integer parameterId) {

        this.removeById(parameterId);
    }



    @Override
    public void updatePraemeter(UpdateParameterParam updateParameterParam) {
        if(updateParameterParam!=null){
            Parameter parameter = getOne(new QueryWrapper<Parameter>().eq("parameter_id", updateParameterParam.getParameterId()));
            if (parameter!=null){
                parameter.setParameterName(updateParameterParam.getParameterName());
                parameter.setParameterType(updateParameterParam.getParameterType());
                parameter.setParameterWay(updateParameterParam.getParameterWay());
                Size size = iSizeService.getOne(new QueryWrapper<Size>().eq("size_id", parameter.getSizeId()));
                if(size!=null){
                    List<String> sizeName = updateParameterParam.getSizeName();
                    String name= StringUtils.join(sizeName,',');
                    size.setSizeName(name);
                    iSizeService.updateById(size);
                }
                updateById(parameter);
            }
        }
    }


    @Override
    public String getSizeName(Integer parameterId) {
        String name=null;
        if(parameterId!=null){
            Parameter one = getOne(new QueryWrapper<Parameter>().eq("parameter_id", parameterId));
            if (one!=null){
                Size size= iSizeService.getOne(new QueryWrapper<Size>().eq("size_id", one.getSizeId()));
               name=size.getSizeName();
            }
        }
        return name;
    }
}
